﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using SAAC.DTO;
using System.Data;


namespace SAAC.DAL
{
	public class ColegiadoDAL : DALBase
	{

		public ColegiadoDTO Select(ColegiadoDTO dto, string order = null)
		{
			try
			{
				string sql = "CALL sp_colegiado_sel(@id,@nome,@coordenador,@viceCoordenador,@curso,@order,@limit);";

				if (dto.Curso == null) dto.Curso = new CursoDTO();
				if (dto.Coordenador == null) dto.Coordenador = new ProfessorDTO();
				if (dto.ViceCoordenador == null) dto.ViceCoordenador = new ProfessorDTO();

				MySqlCommand cmd = new MySqlCommand(sql, con);
				cmd.Parameters.AddWithValue("@id", dto.Id);
				cmd.Parameters.AddWithValue("@nome", dto.Nome);
				cmd.Parameters.AddWithValue("@coordenador", dto.Coordenador.Matricula);
				cmd.Parameters.AddWithValue("@viceCoordenador", dto.ViceCoordenador.Matricula);
				cmd.Parameters.AddWithValue("@curso", dto.Curso.Id);
				cmd.Parameters.AddWithValue("@order", order);
				cmd.Parameters.AddWithValue("@limit", 1);

				con.Open();
				MySqlDataReader dr;

				dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

				if (dr.Read())
				{
					dto.Id = Convert.ToInt32(dr["idColegiado"]);
					dto.Nome = dr["nome"].ToString();
					dto.Coordenador.Matricula = Convert.ToInt32(dr["coordenador"]);
					dto.ViceCoordenador.Matricula = Convert.ToInt32(dr["viceCoordenador"]);
					dto.Curso.Id = Convert.ToInt32(dr["curso"]);
				}
				else dto = null;

				return dto;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}

		public List<ColegiadoDTO> SelectAll(ColegiadoDTO dto, string order = null, int limit = 1000)
		{
			try
			{
				string sql = "CALL sp_colegiado_sel(@id,@nome,@coordenador,@viceCoordenador,@curso,@order,@limit);";

				if (dto.Curso == null) dto.Curso = new CursoDTO();
				if (dto.Coordenador == null) dto.Coordenador = new ProfessorDTO();
				if (dto.ViceCoordenador == null) dto.ViceCoordenador = new ProfessorDTO();

				var lista = new List<ColegiadoDTO>();

				MySqlCommand cmd = new MySqlCommand(sql, con);
				cmd.Parameters.AddWithValue("@id", dto.Id);
				cmd.Parameters.AddWithValue("@nome", dto.Nome);
				cmd.Parameters.AddWithValue("@coordenador", dto.Coordenador.Matricula);
				cmd.Parameters.AddWithValue("@viceCoordenador", dto.ViceCoordenador.Matricula);
				cmd.Parameters.AddWithValue("@curso", dto.Curso.Id);
				cmd.Parameters.AddWithValue("@order", order);
				cmd.Parameters.AddWithValue("@limit", limit);

				con.Open();
				MySqlDataReader dr;

				dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);




				while (dr.Read())
				{
					var item = new ColegiadoDTO();

					if (item.Curso == null) item.Curso = new CursoDTO();
					if (item.Coordenador == null) item.Coordenador = new ProfessorDTO();
					if (item.ViceCoordenador == null) item.ViceCoordenador = new ProfessorDTO();

					item.Id = Convert.ToInt32(dr["idColegiado"]);
					item.Nome = dr["nome"].ToString();
					item.Coordenador.Matricula = Convert.ToInt32(dr["coordenador"]);
					item.ViceCoordenador.Matricula = Convert.ToInt32(dr["viceCoordenador"]);
					item.Curso.Id = Convert.ToInt32(dr["curso"]);
					lista.Add(item);
				}

				return lista;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}


		public void Insert(ColegiadoDTO dto)
		{
			try
			{
				String sql = @"CALL sp_colegiado_ins(@id,@nome,@coordenador,@viceCoordenador,@curso);";

				MySqlCommand cmd = new MySqlCommand(sql, con);

				cmd.Parameters.AddWithValue("@id", dto.Id);
				cmd.Parameters.AddWithValue("@nome", dto.Nome);
				cmd.Parameters.AddWithValue("@coordenador", dto.Coordenador.Matricula);
				cmd.Parameters.AddWithValue("@viceCoordenador", dto.ViceCoordenador.Matricula);
				cmd.Parameters.AddWithValue("@curso", dto.Curso.Id);

				con.Open();
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}

		public void Update(ColegiadoDTO dto)
		{
			try
			{
				String sql = "CALL sp_colegiado_upd(@id,@nome,@coordenador,@viceCoordenador,@curso);";

				MySqlCommand cmd = new MySqlCommand(sql, con);

				cmd.Parameters.AddWithValue("@id", dto.Id);
				cmd.Parameters.AddWithValue("@nome", dto.Nome);
				cmd.Parameters.AddWithValue("@coordenador", dto.Coordenador.Matricula);
				cmd.Parameters.AddWithValue("@viceCoordenador", dto.ViceCoordenador.Matricula);
				cmd.Parameters.AddWithValue("@curso", dto.Curso.Id);

				con.Open();
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}

		public void Delete(ColegiadoDTO dto)
		{
			try
			{
				String sql = "CALL sp_colegiado_del(@id);";

				MySqlCommand cmd = new MySqlCommand(sql, con);

				cmd.Parameters.AddWithValue("@id", dto.Id);

				con.Open();
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				con.Close();
			}
		}
	}
}
